package com.muchfish.function;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.function.Supplier;

public class MethodReference {
    public static void main(String[] args) {
        //静态方法引用： 引用类的静态方法
        //格式：类名::静态方法
        // Lambda表达式
        Function<Integer, String> lambdaStatic =  x -> Long.toString(x);
        // 静态方法引用
        Function<Integer, String> referenceStatic = Long::toString;

        //实例方法引用： 引用特定对象的实例方法
        //格式：实例::成员方法
        //和类方法引用的区别：目前来看，一个是无参函数，一个是有参函数。
        //实例方法引用应该很少用，多此一举的操作。可以直接用实例调用该方法就获取到结果，所以实例方法引用结果也是固定的，
        // Lambda表达式
        String str = "Hello";
        Supplier<Object> lambdaInstance = () -> str.toUpperCase();
        // 实例方法引用
        Supplier<String> referenceInstance = str::toUpperCase;

        //类方法引用：引用类的成员方法
        //格式：类名::成员方法
        // Lambda表达式
        Function<String, String> lambdaClass = s -> s.toUpperCase();
        // 类方法引用
        Function<String, String> referenceClass = String::toUpperCase;

        //构造方法引用： 引用类的构造方法。
        // Lambda表达式
        Supplier<List<String>> lambdaStructure = () -> new ArrayList<>();
        // 构造方法引用
        Supplier<List<String>> referenceStructure = ArrayList::new;


    }
}
